using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._SpatialAnalystTools._Groundwater
{
    /// <summary>
    /// <para>Darcy Flow</para>
    /// <para>Calculates the groundwater volume balance residual and other outputs for steady flow in an aquifer.</para>
    /// <para>计算含水层中稳定流量的地下水量平衡、残余和其他输出。</para>
    /// </summary>    
    [DisplayName("Darcy Flow")]
    public class DarcyFlow : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DarcyFlow()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_head_raster">
        /// <para>Input groundwater head elevation raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the groundwater head elevation at that location.</para>
        ///   <para>The head is typically an elevation above some datum, such as mean sea level.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的地下水头高程。</para>
        ///   <para>头部通常是高于某些基准面（例如平均海平面）的高程。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_porosity_raster">
        /// <para>Input effective formation porosity raster</para>
        /// <para>The input raster where each cell value represents the effective formation porosity at that location.</para>
        /// <para>输入栅格，其中每个像元值表示该位置的有效地层孔隙度。</para>
        /// </param>
        /// <param name="_in_thickness_raster">
        /// <para>Input saturated thickness raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the saturated thickness at that location.</para>
        ///   <para>The value for the thickness is interpreted from geological properties of the aquifer.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的饱和厚度。</para>
        ///   <para>厚度值是根据含水层的地质特性来解释的。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_transmissivity_raster">
        /// <para>Input formation transmissivity raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the formation transmissivity at that location.</para>
        ///   <para>The transmissivity of an aquifer is defined as the hydraulic conductivity K times the saturated aquifer thickness b, as units of length squared over time. This property is generally estimated from field experimental data such as pumping tests. Tables 1 and 2 in How Darcy Flow and Darcy Velocity work list ranges of hydraulic conductivities for some generalized geologic materials.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的地层透射率。</para>
        ///   <para>含水层的透射率定义为水力传导率K乘以饱和含水层厚度b，作为长度随时间变化的平方单位。该特性通常是根据现场实验数据（例如泵送测试）估算的。达西流和达西速度的工作原理中的表 1 和表 2 列出了一些广义地质材料的水力传导率范围。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_volume_raster">
        /// <para>Output groundwater volume balance residual raster</para>
        /// <para><xdoc>
        ///   <para>The output volume balance residual raster.</para>
        ///   <para>Each cell value represents the groundwater volume balance residual for steady flow in an aquifer, as determined by Darcy's Law.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出体积平衡残差栅格。</para>
        ///   <para>每个像元值表示含水层中稳定流动的地下水量平衡残余，由达西定律确定。</para>
        /// </xdoc></para>
        /// </param>
        public DarcyFlow(object _in_head_raster, object _in_porosity_raster, object _in_thickness_raster, object _in_transmissivity_raster, object _out_volume_raster)
        {
            this._in_head_raster = _in_head_raster;
            this._in_porosity_raster = _in_porosity_raster;
            this._in_thickness_raster = _in_thickness_raster;
            this._in_transmissivity_raster = _in_transmissivity_raster;
            this._out_volume_raster = _out_volume_raster;
        }
        public override string ToolboxName => "Spatial Analyst Tools";

        public override string ToolName => "Darcy Flow";

        public override string CallName => "sa.DarcyFlow";

        public override List<string> AcceptEnvironments => ["autoCommit", "cellSize", "cellSizeProjectionMethod", "configKeyword", "extent", "geographicTransformations", "outputCoordinateSystem", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_head_raster, _in_porosity_raster, _in_thickness_raster, _in_transmissivity_raster, _out_volume_raster, _out_direction_raster, _out_magnitude_raster];

        /// <summary>
        /// <para>Input groundwater head elevation raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the groundwater head elevation at that location.</para>
        ///   <para>The head is typically an elevation above some datum, such as mean sea level.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的地下水头高程。</para>
        ///   <para>头部通常是高于某些基准面（例如平均海平面）的高程。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input groundwater head elevation raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_head_raster { get; set; }


        /// <summary>
        /// <para>Input effective formation porosity raster</para>
        /// <para>The input raster where each cell value represents the effective formation porosity at that location.</para>
        /// <para>输入栅格，其中每个像元值表示该位置的有效地层孔隙度。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input effective formation porosity raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_porosity_raster { get; set; }


        /// <summary>
        /// <para>Input saturated thickness raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the saturated thickness at that location.</para>
        ///   <para>The value for the thickness is interpreted from geological properties of the aquifer.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的饱和厚度。</para>
        ///   <para>厚度值是根据含水层的地质特性来解释的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input saturated thickness raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_thickness_raster { get; set; }


        /// <summary>
        /// <para>Input formation transmissivity raster</para>
        /// <para><xdoc>
        ///   <para>The input raster where each cell value represents the formation transmissivity at that location.</para>
        ///   <para>The transmissivity of an aquifer is defined as the hydraulic conductivity K times the saturated aquifer thickness b, as units of length squared over time. This property is generally estimated from field experimental data such as pumping tests. Tables 1 and 2 in How Darcy Flow and Darcy Velocity work list ranges of hydraulic conductivities for some generalized geologic materials.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入栅格，其中每个像元值表示该位置的地层透射率。</para>
        ///   <para>含水层的透射率定义为水力传导率K乘以饱和含水层厚度b，作为长度随时间变化的平方单位。该特性通常是根据现场实验数据（例如泵送测试）估算的。达西流和达西速度的工作原理中的表 1 和表 2 列出了一些广义地质材料的水力传导率范围。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input formation transmissivity raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_transmissivity_raster { get; set; }


        /// <summary>
        /// <para>Output groundwater volume balance residual raster</para>
        /// <para><xdoc>
        ///   <para>The output volume balance residual raster.</para>
        ///   <para>Each cell value represents the groundwater volume balance residual for steady flow in an aquifer, as determined by Darcy's Law.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出体积平衡残差栅格。</para>
        ///   <para>每个像元值表示含水层中稳定流动的地下水量平衡残余，由达西定律确定。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output groundwater volume balance residual raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_volume_raster { get; set; }


        /// <summary>
        /// <para>Output direction raster</para>
        /// <para><xdoc>
        ///   <para>The output flow direction raster.</para>
        ///   <para>Each cell value represents the direction of the seepage velocity vector (average linear velocity) at the center of the cell, calculated as the average value of the seepage velocity through the four faces of the cell.</para>
        ///   <para>It is used with the output magnitude raster to describe the flow vector.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输出流向栅格。</para>
        ///   <para>每个像元值表示像元中心处渗流速度矢量（平均线速度）的方向，计算为通过像元四个面的渗流速度的平均值。</para>
        ///   <para>它与输出幅度栅格一起使用，以描述流向量。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output direction raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_direction_raster { get; set; } = null;


        /// <summary>
        /// <para>Output magnitude raster</para>
        /// <para><xdoc>
        ///   <para>An optional output raster where each cell value represents the magnitude of the seepage velocity vector (average linear velocity) at the center of the cell, calculated as the average value of the seepage velocity through the four faces of the cell.</para>
        ///   <para>It is used with the output direction raster to describe the flow vector.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>可选输出栅格，其中每个像元值表示像元中心的渗流速度矢量（平均线速度）的大小，计算为通过像元四个面的渗流速度的平均值。</para>
        ///   <para>它与输出方向栅格一起用于描述流向量。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output magnitude raster")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_magnitude_raster { get; set; } = null;


        public DarcyFlow SetEnv(int? autoCommit = null, object cellSize = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object outputCoordinateSystem = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, cellSize: cellSize, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, outputCoordinateSystem: outputCoordinateSystem, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}